﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaPagoCuotaAlumnoViewModel
    {

        private RelayCommand buscarCuotaAlumnoCommand;
        private RelayCommand editarPagoCuotaAlumnoCommand;
        private RelayCommand eliminarPagoCuotaAlumnoCommand;

        public event EditarEntidad EditarEntidad;
        private string año;
        private string mes;
        private Guid idSeleccionado;

        public List<ViewEntity> ListaMeses { get; set; }

        public string Año
        {
            get { return año; }
            set { año = value; }

        }

        public string Mes
        {
            get { return mes; }
            set { mes = value; }

        }

        public ICommand BuscarCuotaAlumnoCommand
        {
            get
            {
                return buscarCuotaAlumnoCommand;
            }
        }

        public ICommand EditarPagoCuotaAlumnoCommand
        {
            get
            {
                return editarPagoCuotaAlumnoCommand;
            }
        }

        public ICommand EliminarPagoCuotaAlumnoCommand
        {
            get
            {
                return eliminarPagoCuotaAlumnoCommand;
            }
        }


        public List<ViewEntity> ListaAlumnos { get; set; }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }

        }

        private VentanaBusquedaPagoCuotaAlumno view;

        public VentanaBusquedaPagoCuotaAlumnoViewModel() { }

        public VentanaBusquedaPagoCuotaAlumnoViewModel(VentanaBusquedaPagoCuotaAlumno vista)
        {
            this.view = vista;
            this.view.btnEditar.Visibility = Visibility.Visible;
            this.view.btnEliminar.Visibility = Visibility.Collapsed;

            this.buscarCuotaAlumnoCommand = new RelayCommand(BuscarCuotaAlumno);
            this.editarPagoCuotaAlumnoCommand = new RelayCommand(EditarCuotaAlumno);

            this.año = DateTime.Now.Year.ToString();

            ListaMeses = new List<ViewEntity>();
            ListaMeses.Add(new ViewEntity("Enero"));
            ListaMeses.Add(new ViewEntity("Febrero"));
            ListaMeses.Add(new ViewEntity("Marzo"));
            ListaMeses.Add(new ViewEntity("Abril"));
            ListaMeses.Add(new ViewEntity("Mayo"));
            ListaMeses.Add(new ViewEntity("Junio"));
            ListaMeses.Add(new ViewEntity("Julio"));
            ListaMeses.Add(new ViewEntity("Agosto"));
            ListaMeses.Add(new ViewEntity("Septiembre"));
            ListaMeses.Add(new ViewEntity("Octubre"));
            ListaMeses.Add(new ViewEntity("Noviembre"));
            ListaMeses.Add(new ViewEntity("Diciembre"));

        }

        public VentanaBusquedaPagoCuotaAlumnoViewModel(VentanaBusquedaPagoCuotaAlumno vista, string eliminar)
        {
            this.view = vista;

            this.buscarCuotaAlumnoCommand = new RelayCommand(BuscarCuotaAlumno);
            this.eliminarPagoCuotaAlumnoCommand = new RelayCommand(EliminarCuotaAlumno);

            this.view.btnEditar.Visibility = Visibility.Collapsed;
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.titulo.Content = "Eliminar Pago de Cuota";

            this.año = DateTime.Now.Year.ToString();

            ListaMeses = new List<ViewEntity>();
            ListaMeses.Add(new ViewEntity("Enero"));
            ListaMeses.Add(new ViewEntity("Febrero"));
            ListaMeses.Add(new ViewEntity("Marzo"));
            ListaMeses.Add(new ViewEntity("Abril"));
            ListaMeses.Add(new ViewEntity("Mayo"));
            ListaMeses.Add(new ViewEntity("Junio"));
            ListaMeses.Add(new ViewEntity("Julio"));
            ListaMeses.Add(new ViewEntity("Agosto"));
            ListaMeses.Add(new ViewEntity("Septiembre"));
            ListaMeses.Add(new ViewEntity("Octubre"));
            ListaMeses.Add(new ViewEntity("Noviembre"));
            ListaMeses.Add(new ViewEntity("Diciembre"));
        }

        public void BuscarCuotaAlumno(object parameter)
        {
            if (Validaciones())
            {
                ListaAlumnos = new PagarCuotaAlumnoLogica().ObtenerCuotasPagasAEditarPorMesAño(this.mes, Convert.ToInt32(this.año));

                if (ListaAlumnos != null && ListaAlumnos.Count > 0)
                {
                    this.view.listaDatos.ItemsSource = ListaAlumnos;
                    this.view.panelResultados.Visibility = Visibility.Visible;
                    this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                }
                else
                {
                    this.view.panelResultados.Visibility = Visibility.Collapsed;
                    this.view.lblNoRecords.Visibility = Visibility.Visible;
                    this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                    
                }
            }         


        }


        public void EditarCuotaAlumno(object Parameter)
        {

            if (this.idSeleccionado != Guid.Empty)
            {
                this.view.lblNoSelected.Visibility = Visibility.Collapsed;

                CuotaAlumno entidad = new PagarCuotaAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado, this.mes, Convert.ToInt32(this.año));
                this.EditarEntidad(CasosDeUso.NuevoPagoCuotaAlumno, entidad);
                this.view.Close();

            }
            else
            {
                this.view.lblNoSelected.Visibility = Visibility.Visible;
            }

        }

            public void EliminarCuotaAlumno(object Parameter)
            {

                if (this.idSeleccionado != Guid.Empty)
                {
                    if (MessageBox.Show("¿Está seguro que desea eliminar el pago de la cuota del alumno seleccionado?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                    {
                        this.view.lblNoSelected.Visibility = Visibility.Collapsed;

                        CuotaAlumno entidad = new PagarCuotaAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado, this.mes, Convert.ToInt32(this.año));
                    
                        entidad.Eliminada = true;
                        new PagarCuotaAlumnoLogica().Modificar(entidad);

                        VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "El pago de la cuota del alumno seleccionado ha sido eliminado");
                        nueva.ShowDialog();
                        this.view.Close();                 

                    }

                }
                else
                {
                    this.view.lblNoSelected.Visibility = Visibility.Visible;
                }

            }

            internal bool Validaciones()
            {

                if (this.año.Length != 4)
                {
                    VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Año' ha sido ingresado de forma incorrecta");
                    this.view.panelResultados.Visibility = Visibility.Collapsed;
                    this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                    nueva.ShowDialog();
                    return false;

                }

                if (String.IsNullOrWhiteSpace(this.mes))
                {
                    VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un mes");
                    this.view.panelResultados.Visibility = Visibility.Collapsed;
                    this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                    nueva.ShowDialog();
                    return false;
                }

                return true;
            }



















    }
}
